# List Comprehensions 列表生成器

import os

print(list(range(0, 11)))

# 把要生成的元素x * x放到前面，后面跟for循环，就可以把list创建出来，十分有用

print([x * x for x in range(1, 11)])  # amazing

# for循环后面还可以加上if判断，这样我们就可以筛选出仅偶数的平方：
# 跟在for后面的if是一个筛选条件，不能带else
print([x * x for x in range(1, 11) if x % 2 == 0])

# 还可以使用两层循环，可以生成全排列
print([m + n for m in 'ABCD' for n in 'XYZT'])

# 运用列表生成式，可以写出非常简洁的代码。
# 例如，列出当前目录下的所有文件和目录名，可以通过一行代码实现：
print([d for d in os.listdir('.')])

# 列表生成式也可以使用两个变量来生成list：
d = {'x': 'A', 'y': 'B', 'z': 'C'}
print([k + '=' + v for k, v in d.items()])

print([x * x if x % 2 == 0 else -x for x in range(1, 11)])


# 斐波拉契数列
def fib(max):
    n, b, a = 0, 0, 1
    while n < max:
        print(b)
        a, b = b, a + b
        n = n + 1
    return 'done'


print(fib(9))
